package com.huellas.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import com.huellas.bean.UsuarioBean;
import com.huellas.excepcion.DAOExcepcion;
import com.huellas.util.ConexionBD;

public abstract class UsuarioDAO extends BaseDAO{

	//Metodo para insertar usuario
	public void insertarUsuario(UsuarioBean usuarioBean) throws DAOExcepcion{
		String query = "insert into Usuario(CoUsuario, NoUsuario, ApPaterno, ApMaterno, Direccion, Email, Celular, NoTipoUsuario, rol_CoRol, estadoCliente_CoEstadoCliente) values (?,?,?,?,?,?,?,?,?,?)";
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {
			connection = ConexionBD.obtenerConexion();
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, usuarioBean.getCoUsuario());
			preparedStatement.setString(2, usuarioBean.getNoUsuario());
			preparedStatement.setString(3, usuarioBean.getApPaterno());
			preparedStatement.setString(4, usuarioBean.getApMaterno());
			preparedStatement.setString(5, usuarioBean.getDireccion());
			preparedStatement.setString(6, usuarioBean.getEmail());
			preparedStatement.setInt(7, usuarioBean.getCelular());
			preparedStatement.setString(8, usuarioBean.getNoTipoUsuario());
			preparedStatement.setInt(9, usuarioBean.getRolBean().getCoRol());
			preparedStatement.setInt(10, usuarioBean.getEstadoClienteBean().getCoEstadoCliente());
				
			int i = preparedStatement.executeUpdate();
					
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			preparedStatement = connection.prepareStatement(query);
			resultSet = preparedStatement.executeQuery();
				
			if (resultSet.next()) {
				id = resultSet.getInt(1);
			}
			usuarioBean.setCoUsuario(id);
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(resultSet);
			this.cerrarStatement(preparedStatement);
			this.cerrarConexion(connection);
		}
	}
	
	public void modificarUsuario(UsuarioBean usuarioBean) throws DAOExcepcion{
		String query = "update usuario set NoUsuario = ?, ApPaterno = ?, ApMaterno = ?, Direccion = ?, Email = ?, Celular = ?, NoTipoUsuario = ?, rol_CoRol = ?, estadoCliente_CoEstadoCliente = ? where CoUsuario = ?";
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		
		try{
			connection = ConexionBD.obtenerConexion();
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setString(1, usuarioBean.getNoUsuario());
			preparedStatement.setString(2, usuarioBean.getApPaterno());
			preparedStatement.setString(3, usuarioBean.getApMaterno());
			preparedStatement.setString(4, usuarioBean.getDireccion());
			preparedStatement.setString(5, usuarioBean.getEmail());
			preparedStatement.setInt(6, usuarioBean.getCelular());
			preparedStatement.setString(7, usuarioBean.getNoTipoUsuario());
			preparedStatement.setInt(8, usuarioBean.getRolBean().getCoRol());
			preparedStatement.setInt(9, usuarioBean.getEstadoClienteBean().getCoEstadoCliente());
			preparedStatement.setInt(10, usuarioBean.getCoUsuario());
			
			int i = preparedStatement.executeUpdate();
			if (i != 1){
				throw new SQLException("No se pudo actualizar");
			}
		}catch(SQLException e){
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}finally{
			this.cerrarStatement(preparedStatement);
			this.cerrarConexion(connection);
		}
	}
}
